#include <iostream>
#include <memory> //跟智能指针有关的头文件
using namespace std;


/*
	三种智能指针对象之间赋值
*/
int main()
{
	auto_ptr<int> p1(new int);
	//存放数据到p1里面
	*p1=123;
	
	//再来新建一个智能指针对象
	auto_ptr<int> p2;  //野指针
	/*
		auto_ptr重载=
		重载=的源码做了如下事情：把p1的堆空间所有权转让给p2，确保永远只有一个智能指针对象拥有堆空间的所有权
		原因：同一个堆空间不能释放多次
	*/
	p2=p1; //对象赋值,常规的理解，p2和p1指向同一个堆空间
	//打印数据
	//cout<<"p1里面存放的数据: "<<*p1<<endl; //段错误，p1不再拥有堆空间的所有权，是个野指针
	cout<<"p2里面存放的数据: "<<*p2<<endl;
	auto_ptr<int> p3;  //野指针
	p3=p2;
	cout<<"p3里面存放的数据: "<<*p3<<endl;
}